package cc.yaomm.common.basic.excel;

import com.alibaba.excel.write.handler.WriteHandler;

import java.util.List;
import java.util.Set;

/**
 * <p>@Description : 导出Excel的配置接口</p>
 * <p>@Author : QiLin.Xing </p>
 * <p>@Date : 2019/11/5 0005 下午 15:59 </p>
 */
public interface ExcelExportConfig<T> {

    /**
     * <p>@Description : 获取Excel的sheet名称，文件名称是基于此名称+随机数</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/5 0005 下午 16:02 </p>
     *
     * @return java.lang.String
     */
    String getFileName();

    /**
     * <p>@Description : 获取导出总数据量</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/5 0005 下午 16:05 </p>
     *
     * @return int
     */
    int getTotalCount();

    /**
     * <p>@Description : 获取每页数据</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/5 0005 下午 16:16 </p>
     *
     * @return java.util.List<T>
     */
    List<T> getData(int pageNo, int pageSize);

    /**
     * <p>@Description : 获取每页导出数据量</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/5 0005 下午 16:11 </p>
     *
     * @return int
     */
    default int getPageSize() {
        return 20000;
    }

    /**
     * <p>@Description : 获取头模型类型</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/5 0005 下午 16:12 </p>
     *
     * @return java.lang.Class
     */
    Class getModelClass();

    /**
     * <p>@Description : 获取动态头</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/6 0006 上午 10:01 </p>
     *
     * @return java.util.List<java.util.List   <   java.lang.String>>
     */
    default List<List<String>> getHeads() {
        return null;
    }

    /**
     * <p>@Description : 排除导出列</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/6 0006 上午 11:46 </p>
     *
     * @return java.util.Set<java.lang.String>
     */
    default Set<String> getExcludeColumns() {
        return null;
    }

    /**
     * <p>@Description : 指定导出列</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/6 0006 上午 11:47 </p>
     *
     * @return java.util.Set<java.lang.String>
     */
    default Set<String> getIncludeColumns() {
        return null;
    }

    /**
     * <p>@Description : 合并策略</p>
     * <p>@Author : QiLin.Xing </p>
     * <p>@Date : 2019/11/6 0006 下午 12:05 </p>
     *
     * @return com.alibaba.excel.write.handler.WriteHandler
     */
    default WriteHandler getLoopMergeStrategy() {
        return null;
    }
}
